package com.trainoo.consulclient;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ConsulClientApplication {

    /**
     * ---  consul启动命令（单节点启动）：
     * consul agent -server -bind=10.10.10.1 -client=0.0.0.0 -bootstrap-expect=1 -data-dir=D:\tmp\consul -node=server1 -ui
     *
     * -server 表示是以服务端身份启动
     * -bind 表示绑定到哪个ip（有些服务器会绑定多块网卡，可以通过bind参数强制指定绑定的ip）
     * -client 指定客户端访问的ip(consul有丰富的api接口，这里的客户端指浏览器或调用方)，0.0.0.0表示不限客户端ip
     * -bootstrap-expect=1 表示server集群最低节点数为1，低于这个值将工作不正常(注：类似zookeeper一样，通常集群数为奇数，方便选举，consul采用的是raft算法)
     * -data-dir 表示指定数据的存放目录（该目录必须存在）
     * -node 表示节点在web ui中显示的名称
     * -ui 开启web ui界面 -- http://localhost:8500/ui/
     *
     *
     * ---  集群模式
     * #启动第1个Server节点，集群要求要有3个Server，将容器8500端口映射到主机8900端口，同时开启管理界面
     * docker run -d --name=consul1 -p 8900:8500 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --bootstrap-expect=3 --client=0.0.0.0 -ui
     * #启动第2个Server节点，并加入集群
     * docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2
     * #启动第3个Server节点，并加入集群
     * docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2
     * #启动第4个Client节点，并加入集群
     * docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 172.17.0.2
     */
    public static void main(String[] args) {
        new SpringApplicationBuilder(ConsulClientApplication.class).web(true).run(args);
    }

}
